{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Probabilistic Long-Horizon"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Long-horizon forecasting is challenging because of the *volatility* of the predictions and the *computational complexity*. To solve this problem we created the [NHITS](https://arxiv.org/abs/2201.12886) model and made the code available [NeuralForecast library](https://nixtla.github.io/neuralforecast/models.nhits.html). `NHITS` specializes its partial outputs in the different frequencies of the time series through hierarchical interpolation and multi-rate input processing. We model the target time-series with Student's t-distribution. The `NHITS` will output the distribution parameters for each timestamp. \n",
    "\n",
    "In this notebook we show how to use `NHITS` on the [ETTm2](https://github.com/zhouhaoyi/ETDataset) benchmark dataset for probabilistic forecasting. This data set includes data points for 2 Electricity Transformers at 2 stations, including load, oil temperature.\n",
    "\n",
    "We will show you how to load data, train, and perform automatic hyperparameter tuning, **to achieve SoTA performance**, outperforming even the latest Transformer architectures for a fraction of their computational cost (50x faster)."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can run these experiments using GPU with Google Colab.\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/Nixtla/neuralforecast/blob/main/nbs/examples/LongHorizon_Probabilistic.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%capture\n",
    "!pip install neuralforecast datasetsforecast"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Load ETTm2 Data\n",
    "\n",
    "The `LongHorizon` class will automatically download the complete ETTm2 dataset and process it.\n",
    "\n",
    "It return three Dataframes: `Y_df` contains the values for the target variables, `X_df` contains exogenous calendar features and `S_df` contains static features for each time-series (none for ETTm2). For this example we will only use `Y_df`.\n",
    "\n",
    "If you want to use your own data just replace `Y_df`. Be sure to use a long format and have a simmilar structure than our data set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from datasetsforecast.long_horizon import LongHorizon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <div id=\"df-354ffb05-28c1-497a-81bb-fe74a34dbbc7\">\n",
       "    <div class=\"colab-df-container\">\n",
       "      <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>unique_id</th>\n",
       "      <th>ds</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>HUFL</td>\n",
       "      <td>2016-07-01 00:00:00</td>\n",
       "      <td>-0.041413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>HUFL</td>\n",
       "      <td>2016-07-01 00:15:00</td>\n",
       "      <td>-0.185467</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57600</th>\n",
       "      <td>HULL</td>\n",
       "      <td>2016-07-01 00:00:00</td>\n",
       "      <td>0.040104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57601</th>\n",
       "      <td>HULL</td>\n",
       "      <td>2016-07-01 00:15:00</td>\n",
       "      <td>-0.214450</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>115200</th>\n",
       "      <td>LUFL</td>\n",
       "      <td>2016-07-01 00:00:00</td>\n",
       "      <td>0.695804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>115201</th>\n",
       "      <td>LUFL</td>\n",
       "      <td>2016-07-01 00:15:00</td>\n",
       "      <td>0.434685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>172800</th>\n",
       "      <td>LULL</td>\n",
       "      <td>2016-07-01 00:00:00</td>\n",
       "      <td>0.434430</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>172801</th>\n",
       "      <td>LULL</td>\n",
       "      <td>2016-07-01 00:15:00</td>\n",
       "      <td>0.428168</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>230400</th>\n",
       "      <td>MUFL</td>\n",
       "      <td>2016-07-01 00:00:00</td>\n",
       "      <td>-0.599211</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>230401</th>\n",
       "      <td>MUFL</td>\n",
       "      <td>2016-07-01 00:15:00</td>\n",
       "      <td>-0.658068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>288000</th>\n",
       "      <td>MULL</td>\n",
       "      <td>2016-07-01 00:00:00</td>\n",
       "      <td>-0.393536</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>288001</th>\n",
       "      <td>MULL</td>\n",
       "      <td>2016-07-01 00:15:00</td>\n",
       "      <td>-0.659338</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>345600</th>\n",
       "      <td>OT</td>\n",
       "      <td>2016-07-01 00:00:00</td>\n",
       "      <td>1.018032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>345601</th>\n",
       "      <td>OT</td>\n",
       "      <td>2016-07-01 00:15:00</td>\n",
       "      <td>0.980124</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-354ffb05-28c1-497a-81bb-fe74a34dbbc7')\"\n",
       "              title=\"Convert this dataframe to an interactive table.\"\n",
       "              style=\"display:none;\">\n",
       "        \n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
       "       width=\"24px\">\n",
       "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
       "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
       "  </svg>\n",
       "      </button>\n",
       "      \n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      flex-wrap:wrap;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "      <script>\n",
       "        const buttonEl =\n",
       "          document.querySelector('#df-354ffb05-28c1-497a-81bb-fe74a34dbbc7 button.colab-df-convert');\n",
       "        buttonEl.style.display =\n",
       "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "        async function convertToInteractive(key) {\n",
       "          const element = document.querySelector('#df-354ffb05-28c1-497a-81bb-fe74a34dbbc7');\n",
       "          const dataTable =\n",
       "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                     [key], {});\n",
       "          if (!dataTable) return;\n",
       "\n",
       "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "            + ' to learn more about interactive tables.';\n",
       "          element.innerHTML = '';\n",
       "          dataTable['output_type'] = 'display_data';\n",
       "          await google.colab.output.renderOutput(dataTable, element);\n",
       "          const docLink = document.createElement('div');\n",
       "          docLink.innerHTML = docLinkHtml;\n",
       "          element.appendChild(docLink);\n",
       "        }\n",
       "      </script>\n",
       "    </div>\n",
       "  </div>\n",
       "  "
      ],
      "text/plain": [
       "       unique_id                  ds         y\n",
       "0           HUFL 2016-07-01 00:00:00 -0.041413\n",
       "1           HUFL 2016-07-01 00:15:00 -0.185467\n",
       "57600       HULL 2016-07-01 00:00:00  0.040104\n",
       "57601       HULL 2016-07-01 00:15:00 -0.214450\n",
       "115200      LUFL 2016-07-01 00:00:00  0.695804\n",
       "115201      LUFL 2016-07-01 00:15:00  0.434685\n",
       "172800      LULL 2016-07-01 00:00:00  0.434430\n",
       "172801      LULL 2016-07-01 00:15:00  0.428168\n",
       "230400      MUFL 2016-07-01 00:00:00 -0.599211\n",
       "230401      MUFL 2016-07-01 00:15:00 -0.658068\n",
       "288000      MULL 2016-07-01 00:00:00 -0.393536\n",
       "288001      MULL 2016-07-01 00:15:00 -0.659338\n",
       "345600        OT 2016-07-01 00:00:00  1.018032\n",
       "345601        OT 2016-07-01 00:15:00  0.980124"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Change this to your own data to try the model\n",
    "Y_df, _, _ = LongHorizon.load(directory='./', group='ETTm2')\n",
    "Y_df['ds'] = pd.to_datetime(Y_df['ds'])\n",
    "\n",
    "# For this excercise we are going to take 960 timestamps as validation and test\n",
    "n_time = len(Y_df.ds.unique())\n",
    "val_size = 96*10\n",
    "test_size = 96*10\n",
    "\n",
    "Y_df.groupby('unique_id').head(2)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ":::{.callout-important}\n",
    "DataFrames must include all `['unique_id', 'ds', 'y']` columns.\n",
    "Make sure `y` column does not have missing or non-numeric values. \n",
    ":::"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, plot the `HUFL` variable marking the validation and train splits."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# We are going to plot the temperature of the transformer \n",
    "# and marking the validation and train splits\n",
    "u_id = 'HUFL'\n",
    "x_plot = pd.to_datetime(Y_df[Y_df.unique_id==u_id].ds)\n",
    "y_plot = Y_df[Y_df.unique_id==u_id].y.values\n",
    "\n",
    "x_val = x_plot[n_time - val_size - test_size]\n",
    "x_test = x_plot[n_time - test_size]\n",
    "\n",
    "fig = plt.figure(figsize=(10, 5))\n",
    "fig.tight_layout()\n",
    "\n",
    "plt.plot(x_plot, y_plot)\n",
    "plt.xlabel('Date', fontsize=17)\n",
    "plt.ylabel('OT [15 min temperature]', fontsize=17)\n",
    "\n",
    "plt.axvline(x_val, color='black', linestyle='-.')\n",
    "plt.axvline(x_test, color='black', linestyle='-.')\n",
    "plt.text(x_val, 5, '  Validation', fontsize=12)\n",
    "plt.text(x_test, 3, '  Test', fontsize=12)\n",
    "\n",
    "plt.grid()\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Hyperparameter selection and forecasting\n",
    "\n",
    "The `AutoNHITS` class will automatically perform hyperparamter tunning using [Tune library](https://docs.ray.io/en/latest/tune/index.html), exploring a user-defined or default search space. Models are selected based on the error on a validation set and the best model is then stored and used during inference. \n",
    "\n",
    "The `AutoNHITS.default_config` attribute contains a suggested hyperparameter space. Here, we specify a different search space following the paper's hyperparameters. Notice that *1000 Stochastic Gradient Steps* are enough to achieve SoTA performance. Feel free to play around with this space."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from ray import tune\n",
    "\n",
    "from neuralforecast.auto import AutoNHITS\n",
    "from neuralforecast.core import NeuralForecast\n",
    "\n",
    "from neuralforecast.losses.pytorch import DistributionLoss\n",
    "\n",
    "import logging\n",
    "logging.getLogger(\"pytorch_lightning\").setLevel(logging.WARNING)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "horizon = 96 # 24hrs = 4 * 15 min.\n",
    "\n",
    "# Use your own config or AutoNHITS.default_config\n",
    "nhits_config = {\n",
    "       \"learning_rate\": tune.choice([1e-3]),                                     # Initial Learning rate\n",
    "       \"max_steps\": tune.choice([1000]),                                         # Number of SGD steps\n",
    "       \"input_size\": tune.choice([5 * horizon]),                                 # input_size = multiplier * horizon\n",
    "       \"batch_size\": tune.choice([7]),                                           # Number of series in windows\n",
    "       \"windows_batch_size\": tune.choice([256]),                                 # Number of windows in batch\n",
    "       \"n_pool_kernel_size\": tune.choice([[2, 2, 2], [16, 8, 1]]),               # MaxPool's Kernelsize\n",
    "       \"n_freq_downsample\": tune.choice([[168, 24, 1], [24, 12, 1], [1, 1, 1]]), # Interpolation expressivity ratios\n",
    "       \"activation\": tune.choice(['ReLU']),                                      # Type of non-linear activation\n",
    "       \"n_blocks\":  tune.choice([[1, 1, 1]]),                                    # Blocks per each 3 stacks\n",
    "       \"mlp_units\":  tune.choice([[[512, 512], [512, 512], [512, 512]]]),        # 2 512-Layers per block for each stack\n",
    "       \"interpolation_mode\": tune.choice(['linear']),                            # Type of multi-step interpolation\n",
    "       \"random_seed\": tune.randint(1, 10),\n",
    "       \"scaler_type\": tune.choice(['robust']),\n",
    "       \"val_check_steps\": tune.choice([100])\n",
    "    }"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ":::{.callout-tip}\n",
    "Refer to https://docs.ray.io/en/latest/tune/index.html for more information on the different space options, such as lists and continous intervals.m\n",
    ":::"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To instantiate `AutoNHITS` you need to define:\n",
    "\n",
    "* `h`: forecasting horizon\n",
    "* `loss`: training loss. Use the `DistributionLoss` to produce probabilistic forecasts.\n",
    "* `config`: hyperparameter search space. If `None`, the `AutoNHITS` class will use a pre-defined suggested hyperparameter space.\n",
    "* `num_samples`: number of configurations explored."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "models = [AutoNHITS(h=horizon,\n",
    "                    loss=DistributionLoss(distribution='StudentT', level=[80, 90]), \n",
    "                    config=nhits_config,\n",
    "                    num_samples=5)]"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fit the model by instantiating a `NeuralForecast` object with the following required parameters:\n",
    "\n",
    "* `models`: a list of models.\n",
    "\n",
    "* `freq`: a string indicating the frequency of the data. (See [panda's available frequencies](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases).)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fit and predict\n",
    "nf = NeuralForecast(\n",
    "    models=models,\n",
    "    freq='15min')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `cross_validation` method allows you to simulate multiple historic forecasts, greatly simplifying pipelines by replacing for loops with `fit` and `predict` methods.\n",
    "\n",
    "With time series data, cross validation is done by defining a sliding window across the historical data and predicting the period following it. This form of cross validation allows us to arrive at a better estimation of our model’s predictive abilities across a wider range of temporal instances while also keeping the data in the training set contiguous as is required by our models.\n",
    "\n",
    "The `cross_validation` method will use the validation set for hyperparameter selection, and will then produce the forecasts for the test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%capture\n",
    "Y_hat_df = nf.cross_validation(df=Y_df, val_size=val_size,\n",
    "                               test_size=test_size, n_windows=None)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Visualization"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we merge the forecasts with the `Y_df` dataset and plot the forecasts."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y_hat_df = Y_hat_df.reset_index(drop=True)\n",
    "Y_hat_df = Y_hat_df[(Y_hat_df['unique_id']=='OT') & (Y_hat_df['cutoff']=='2018-02-11 12:00:00')]\n",
    "Y_hat_df = Y_hat_df.drop(columns=['y','cutoff'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_df = Y_df.merge(Y_hat_df, on=['unique_id','ds'], how='outer').tail(96*10+50+96*4).head(96*2+96*4)\n",
    "\n",
    "plt.plot(plot_df['ds'], plot_df['y'], c='black', label='True')\n",
    "plt.plot(plot_df['ds'], plot_df['AutoNHITS-median'], c='blue', label='median')\n",
    "plt.fill_between(x=plot_df['ds'], \n",
    "                    y1=plot_df['AutoNHITS-lo-90'], y2=plot_df['AutoNHITS-hi-90'],\n",
    "                    alpha=0.4, label='level 90')\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.plot()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "[Cristian Challu, Kin G. Olivares, Boris N. Oreshkin, Federico Garza, Max Mergenthaler-Canseco, Artur Dubrawski (2021). NHITS: Neural Hierarchical Interpolation for Time Series Forecasting. Accepted at AAAI 2023.](https://arxiv.org/abs/2201.12886)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
